# Практика безопасность ### Зашита от HTML инъекций При постройке HTML строки нужно экранировать все значения которые могли быть введены пользователем Для экранирования значений можно использовать 1. `ru.bitec.app.btk.utils.HTMLUtils.escape` для вставки срок 2. Использовать `scala.XML` для постройки HTML ```scala val sName = ropUser.get(_.sName) // интересное имя "Ваня

" /* Произошла HTML инъекция

Ваня

*/ val sHTML = s"""

$sName

""" /* Нужно экранировать значения вставляемые в HTML-строку. Выведется как обычный текст

Ваня</h1><script>alert('XSS')</script><h1>

*/ val sHTML_correct = s"""

${HTMLUtils.escape(sName)}

""" /* scala XML сама экранирует значения. Выведется как обычный текст

Ваня</h1><script>alert('XSS')</script><h1>

*/ val HTML =

{sName}

.toString ``` Если нужно использовать пользовательский HTML. То его нужно отчистить от вредоносного кода 1. `ru.bitec.app.btk.utils.HTMLUtils.sanitize` Убирает весть JS, небезопасные элементы, и ссылки не на https ресурсы ```scala /* HTML введенный пользователем */ val sHTML = ropDoc.get(_.sDescription) /* Безопасный для использования HTML */ val sHTML_correct = HTMLUtils.sanitize(sHTML) // Предотвращение на вставке в бд override def setsDescription(rop: ApiRop, value: NString): Unit = { super.setsDescription(rop, HTMLUtils.sanitize(value)) } ```